home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbwinit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-03-12  |  7.6 KB  |  213 lines

  1. (*===========================================================================*)
  2. (* Window initialize/close                                                   *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1991 by H. Roy Engehausen.  All rights reserved.  *)
  5. (*   This software may be freely distributed and used, but it may not        *)
  6. (*   under any circumstances be sold by anyone other than the author.        *)
  7. (*   It may be distributed by a commercial company as long as it is          *)
  8. (*   for no cost.                                                            *)
  9. (*                                                                           *)
  10. (*===========================================================================*)
  11.  
  12. (*===========================================================================*)
  13. (* Window initialize                                                         *)
  14. (*===========================================================================*)
  15.  
  16. PROCEDURE window_init;
  17.  
  18.   VAR
  19.     i           : INTEGER;
  20.     regs        : REGISTERS;
  21.     size_bot    : BYTE;
  22.     size_screen : BYTE;
  23.     size_top    : BYTE;
  24.     w           : window_data_ptr;
  25.  
  26.   BEGIN;
  27.  
  28.     (*-----------------------------------------------------------------------*)
  29.     (* Initialize things                                                     *)
  30.     (*-----------------------------------------------------------------------*)
  31.  
  32.     WITH opt_block DO
  33.       BEGIN;
  34.         DIRECTVIDEO := opt_direct_display;
  35.         CHECKSNOW   := opt_direct_snow;
  36.       END;
  37.  
  38.     color(0);
  39.  
  40.     CLRSCR;
  41.  
  42.     (*-----------------------------------------------------------------------*)
  43.     (* Figure out the sizes                                                  *)
  44.     (*-----------------------------------------------------------------------*)
  45.  
  46.     WITH regs DO
  47.       BEGIN;
  48.         AX := $1130;      (* Information request code                        *)
  49.         BX := $0;
  50.         DX := 24;         (* Pre-seed "answer" with value for old iron.      *)
  51.         INTR($10, regs);  (* Video interrupt.                                *)
  52.         size_screen := DL + 1;
  53.       END;
  54.  
  55.     i := size_screen - 2; (* -2 for status line and input line               *)
  56.  
  57.     size_top := (i * opt_block.window_percent) div 100;
  58.     size_bot := i - size_top;
  59.  
  60.     (*-----------------------------------------------------------------------*)
  61.     (* Get cursor data and set the block cursor                              *)
  62.     (*-----------------------------------------------------------------------*)
  63.  
  64.     WITH regs DO
  65.       BEGIN;
  66.         AX := $0300;
  67.         BX := $0;
  68.         INTR($10, regs);
  69.         window_cursor_orig := CX;
  70.       END;
  71.  
  72.     i := window_cursor_orig AND $1F1F;
  73.  
  74.     CASE i OF
  75.       $0B0C : window_cursor_block := $040C;
  76.       $0607 : window_cursor_block := $0307;
  77.       ELSE
  78.         BEGIN;
  79.           WRITELN('Cursor?');
  80.           WRITELN('H', HI(window_cursor_orig));
  81.           WRITELN('L', LO(window_cursor_orig));
  82.           DELAY(5000);
  83.           i := i AND $1F;
  84.           window_cursor_block := $0300 + i;
  85.         END;
  86.     END;
  87.  
  88.     window_cursor_block := (window_cursor_orig AND $60) OR window_cursor_block;
  89.  
  90.     (*-----------------------------------------------------------------------*)
  91.     (* Initialize window locations                                           *)
  92.     (*-----------------------------------------------------------------------*)
  93.  
  94.     FILLCHAR(window_location, SIZEOF(window_location), CHR(0));
  95.  
  96.     WITH window_location[0] DO         (* Full Screen Window                 *)
  97.       BEGIN;
  98.         window_u_y    := HI(WINDMIN) + 1;
  99.         window_l_y    := HI(WINDMAX) + 1;
  100.         window_wl     := HI(WINDMAX) + 1;
  101.       END;
  102.  
  103.     WITH window_location[1] DO         (* Top window                         *)
  104.       BEGIN;
  105.         window_u_y    := 1;
  106.         window_l_y    := window_location[1].window_u_y + size_top - 1;
  107.         window_wl     := size_top;
  108.       END;
  109.  
  110.     WITH window_location[2] DO         (* Bottom window                      *)
  111.       BEGIN;
  112.         window_u_y    := window_location[1].window_l_y + 2;
  113.         window_l_y    := window_location[2].window_u_y + size_bot - 1;
  114.         window_wl     := size_bot;
  115.       END;
  116.  
  117.     (*-----------------------------------------------------------------------*)
  118.     (* Initialize windows                                                    *)
  119.     (*-----------------------------------------------------------------------*)
  120.  
  121.     FILLCHAR(window_array, SIZEOF(window_array), CHR(0));
  122.  
  123.     FOR i := 0 TO 3 DO
  124.       WITH window_array[i] DO
  125.         BEGIN;
  126.           NEW(w);
  127.           WITH w^ DO
  128.             BEGIN;
  129.               last_line  := NIL;
  130.               next_line  := NIL;
  131.               this_line  := '';
  132.               line_color := invisible_color;
  133.             END;
  134.           window_data       := w;
  135.           window_count      := 0;
  136.           window_line       := w;
  137.           window_last       := w;
  138.         END;
  139.  
  140.     WITH window_array[0] DO            (* Full Screen Window                 *)
  141.       BEGIN;
  142.         window_act        := TRUE;
  143.         window_cursor     := 1;
  144.         window_loc        := window_full_screen;
  145.         window_max_data   := 50;
  146.         window_at_top     := FALSE;
  147.         window_scrollable := FALSE;
  148.       END;
  149.  
  150.     WITH window_array[1] DO            (*Connect window                      *)
  151.       BEGIN;
  152.         window_act        := TRUE;
  153.         window_cursor     := 1;
  154.         window_loc        := window_top_screen;
  155.         window_max_data   := opt_block.scroll_conn;
  156.         window_at_top     := TRUE;
  157.         window_scrollable := TRUE;
  158.       END;
  159.  
  160.     WITH window_array[2] DO            (* Monitor window                     *)
  161.       BEGIN;
  162.         window_act        := TRUE;
  163.         window_cursor     := 1;
  164.         window_loc        := window_bottom_screen;
  165.         window_max_data   := opt_block.scroll_mon;
  166.         window_at_top     := TRUE;
  167.         window_scrollable := TRUE;
  168.       END;
  169.  
  170.     WITH window_array[3] DO            (* Operator window                    *)
  171.       BEGIN;
  172.         window_act        := FALSE;
  173.         window_cursor     := 1;
  174.         window_loc        := window_bottom_screen;
  175.         window_max_data   := opt_block.scroll_opr;
  176.         window_at_top     := TRUE;
  177.         window_scrollable := TRUE;
  178.       END;
  179.  
  180.     (*-----------------------------------------------------------------------*)
  181.     (* Initialize screen                                                     *)
  182.     (*-----------------------------------------------------------------------*)
  183.  
  184.     CLRSCR;
  185.     GOTOXY(1,window_location[window_top_screen].window_l_y + 1);
  186.     color(opt_block.status_color);
  187.     WRITE('                                        ');
  188.     WRITE('                                       '); (* -1 to prevent scroll *)
  189.     GOTOXY(1,window_location[window_bottom_screen].window_l_y + 1);
  190.     WRITE('                                        ');
  191.     WRITE('                                       '); (* -1 to prevent scroll *)
  192.     GOTOXY(1,window_location[window_bottom_screen].window_l_y + 1);
  193.  
  194.     current_window := window_reset;
  195.  
  196.   END;
  197.  
  198. (*===========================================================================*)
  199. (* Window close                                                              *)
  200. (*===========================================================================*)
  201.  
  202. PROCEDURE window_close;
  203.   BEGIN;
  204.  
  205.     window_select(window_reset);
  206.  
  207.     TEXTBACKGROUND(0);
  208.     TEXTCOLOR(7);
  209.  
  210.     WRITELN;
  211.  
  212.   END;
  213.